home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / bin / f77-linux < prev    next >
Text File  |  1999-09-16  |  4KB  |  208 lines

  1. #!/bin/sh
  2. PATH=/v/bin:/bin:/usr/bin
  3. # f77-style shell script to compile and load fortran, C, and assembly codes
  4. #    usage:    f77 [-g] [-O|-O2|-O6] [-o absfile] [-c] files [-l library]
  5. #        -o objfile    Override default executable name a.out.
  6. #        -c        Do not call linker, leave relocatables in *.o.
  7. #        -S        leave assembler output on file.s
  8. #        -l library    (passed to ld).
  9. #        -u        complain about undeclared variables
  10. #        -w        omit all warning messages
  11. #        -w66        omit Fortran 66 compatibility warning messages
  12. #        files        FORTRAN source files ending in .f .
  13. #                C source files ending in .c .
  14. #                Assembly language files ending in .s .
  15. #                efl source files ending in .e .
  16. #        -I includepath    passed to C compiler (for .c files)
  17. #        -Ntnnn        allow nnn entries in table t
  18. #        -cpp -Dxxx    pipe through cpp
  19.  
  20. # bugs fixed by Scilab Group
  21.  
  22. s=/tmp/stderr_$$
  23. t=/tmp/f77_$$
  24. CC=${CC_f2c:-'/usr/bin/cc -m486'}
  25. EFL=${EFL:-/v/bin/efl}
  26. EFLFLAGS=${EFLFLAGS:-'system=portable deltastno=10'}
  27. F2C=${F2C:-/usr/bin/f2c}
  28. F2CFLAGS=${F2CFLAGS:='-ARw8 -Nn802'}
  29. rc=0
  30. lib=/lib/num/lib.lo
  31. trap "rm -f $s ; exit \$rc" 0
  32. OUTF=a.out
  33. cOPT=1
  34. G=
  35. CPP=/bin/cat
  36. CPPFLAGS=
  37. # set -- `getopt cD:gI:N:Oo:Suw6 "$@"`
  38. case $? in 0);; *) exit 1;; esac
  39. ARGS=
  40. while
  41.     test -n "$1"
  42. do
  43.     case "$1"
  44.     in
  45.     -c)    cOPT=0
  46.         shift
  47.         ;;
  48.  
  49.     -D)    CPPFLAGS="$CPPFLAGS -D$2"
  50.         shift 2
  51.         ;;
  52.  
  53.     -D*)    CPPFLAGS="$CPPFLAGS $1"
  54.         shift 1
  55.         ;;
  56.  
  57.     -g)    CFLAGS="$CFLAGS -g"
  58.         F2CFLAGS="$F2CFLAGS -g"
  59.         G="-g"
  60.         shift;;
  61.  
  62.     -I)    CFLAGS="$CFLAGS -I$2"
  63.         shift 2
  64.         ;;
  65.  
  66.     -I*)    CFLAGS="$CFLAGS $1"
  67.         shift 1
  68.         ;;
  69.  
  70.     -o)    OUTF=$2
  71.         shift 2
  72.         ;;
  73.  
  74.     -O|-O1|-O2|-O6)
  75.         CFLAGS="$CFLAGS $1"
  76.         shift
  77.         ;;
  78.  
  79.     -u)    F2CFLAGS="$F2CFLAGS -u"
  80.         shift
  81.         ;;
  82.  
  83.     -w)    F2CFLAGS="$F2CFLAGS -w"
  84.         case $2 in -6) F2CFLAGS="$F2CFLAGS"66; shift
  85.             case $2 in -6) shift;; esac;; esac
  86.         shift
  87.         ;;
  88.  
  89.     -N)    F2CFLAGS="$F2CFLAGS $1""$2"
  90.         shift 2
  91.         ;;
  92.  
  93.     -N*|-C)    F2CFLAGS="$F2CFLAGS $1"
  94.         shift 1
  95.         ;;
  96.  
  97.     -cpp)    CPP="/lib/cpp -traditional"
  98.         shift 1
  99.         ;;
  100.  
  101.     -S)    CFLAGS="$CFLAGS -S"
  102.         cOPT=0
  103.         shift
  104.         ;;
  105.  
  106.     *)    ARGS="$ARGS $1"
  107.         shift 1
  108.         ;;
  109.     esac
  110. done
  111.  
  112. if test $cOPT = 0; then
  113.   if test "$OUTF" != "a.out"; then
  114.     CFLAGS="-o $OUTF $CFLAGS"
  115.   fi
  116. fi
  117. set -- $ARGS
  118.  
  119. while
  120.     test -n "$1"
  121. do
  122.     case "$1"
  123.     in
  124.     *.[fF])
  125.         case "$1" in *.f) f=".f";; *.F) f=".F";; esac
  126.         b=`basename $1 $f`
  127.                 trap "rm -f f2ctmp_$b.* ; exit 0" 0
  128.                 sed 's/\\$/\\-/;
  129.                      s/^ *INCLUDE *'\(.*\)'.*$/#include "\1"/' $1 |\
  130.          $CPP $CPPFLAGS |\
  131.          egrep -v '^# ' > f2ctmp_$b.f
  132.                 trap "rm -f f2ctmp_$b.* ; exit 0" 0
  133.         $F2C $F2CFLAGS f2ctmp_$b.f
  134.         case $? in 0);; *) rm f2ctmp_* ; exit 5;; esac
  135.                 rm -f f2ctmp_$b.f
  136.         mv f2ctmp_$b.c $b.c
  137.         if [ -f f2ctmp_$b.P ]; then mv f2ctmp_$b.P $b.P; fi
  138.         case $? in 0);; *) rm -f $b.c ; exit 5;; esac
  139.                 trap "rm -f $s ; exit 0" 0
  140.                 $CC $CPPFLAGS -c $CFLAGS $b.c 2>$s
  141.         rc=$?
  142.         sed '/parameter .* is not referenced/d;/warning: too many parameters/d' $s 1>&2
  143.         case $rc in 0);; *) exit 5;; esac
  144.         rm -f $b.c
  145.         OFILES="$OFILES $b.o"
  146.         case $cOPT in 1) cOPT=2;; esac
  147.         shift
  148.         ;;
  149.     *.e)
  150.         b=`basename $1 .e`
  151.         $EFL $EFLFLAGS $1 >$b.f
  152.         case $? in 0);; *) exit;; esac
  153.         $F2C $F2CFLAGS $b.f
  154.         case $? in 0);; *) exit;; esac
  155.                 $CC -c $CFLAGS $b.c
  156.         case $? in 0);; *) exit;; esac
  157.         OFILES="$OFILES $b.o"
  158.         rm $b.[cf]
  159.         case $cOPT in 1) cOPT=2;; esac
  160.         shift
  161.         ;;
  162.     *.s)
  163.         echo $1: 1>&2
  164.         OFILE=`basename $1 .s`.o
  165.         ${AS:-/usr/bin/as} -o $OFILE $AFLAGS $1
  166.         case $? in 0);; *) exit;; esac
  167.         OFILES="$OFILES $OFILE"
  168.         case $cOPT in 1) cOPT=2;; esac
  169.         shift
  170.         ;;
  171.     *.c)
  172.         echo $1: 1>&2
  173.         OFILE=`basename $1 .c`.o
  174.                 $CC -c $CFLAGS $CPPFLAGS $1
  175.         rc=$?; case $rc in 0);; *) exit;; esac
  176.         OFILES="$OFILES $OFILE"
  177.         case $cOPT in 1) cOPT=2;; esac
  178.         shift
  179.         ;;
  180.     *.o)
  181.         OFILES="$OFILES $1"
  182.         case $cOPT in 1) cOPT=2;; esac
  183.         shift
  184.         ;;
  185.     -l)
  186.         OFILES="$OFILES -l$2"
  187.         shift 2
  188.         case $cOPT in 1) cOPT=2;; esac
  189.         ;;
  190.     -l*)
  191.         OFILES="$OFILES $1"
  192.         shift
  193.         case $cOPT in 1) cOPT=2;; esac
  194.         ;;
  195.     -o)
  196.         OUTF=$2; shift 2;;
  197.     *)
  198.         OFILES="$OFILES $1"
  199.         shift
  200.         case $cOPT in 1) cOPT=2;; esac
  201.         ;;
  202.     esac
  203. done
  204.  
  205. case $cOPT in 2) $CC $G -o $OUTF $OFILES -lf2c -lm;; esac
  206. rc=$?
  207. exit $rc
  208.